package com.sc.nft.entity.dto;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.sc.nft.entity.SaasTask;
import com.sc.nft.entity.SaasTaskMeetConditions;
import com.sc.nft.entity.SaasTaskMeetConditionsOption;
import com.sc.nft.enums.SaasTaskParticipatorEnum;
import com.sc.nft.exception.GlobalRunTimeException;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Data
public class SaasTaskModificationDTO {

    @ApiModelProperty(value = "任务id")
    private Long id;

    @ApiModelProperty(value = "任务结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;

    @ApiModelProperty(value = "任务持仓要求")
    private List<Long>collectionIds;

//    @ApiModelProperty(value = "任务完成总次数,只能大,不能小.")
//    private Integer taskTotalSum;


    public void  validator(SaasTask saasTask, List<SaasTaskMeetConditionsOption>list){
        if (BeanUtil.isEmpty(saasTask)) {
            throw new GlobalRunTimeException("任务不存在");
        }
        if (this.endTime!=null) {
            // 结束时间可修改，但不可早于或等于当前时间
            if (this.endTime.before(new Date())) {
                throw new GlobalRunTimeException("任务结束时间不能小于当前时间");
            }
        }
        // 参与要求必须为持仓条件的时候才可以修改此项.
        if (saasTask.getTaskParticipator()== SaasTaskParticipatorEnum.HOLD_COLLECTION) {
            if (CollUtil.isNotEmpty(this.collectionIds)) {
                List<Long> collect = list.stream().map(SaasTaskMeetConditionsOption::getConditionId).collect(Collectors.toList());
                for (Long collectionId : collect) {
                    if (!this.collectionIds.contains(collectionId)) {
                        throw new GlobalRunTimeException("持仓持有nft只允许增加不允许减少");
                    }
                }
            }
        }


//        if (this.taskTotalSum!=null) {
//            if (this.taskTotalSum<saasTask.getTaskTotalSum()) {
//                throw new GlobalRunTimeException("任务完成总次数只能增加不能减少");
//            }
//        }
    }

}
